www.gusucode.com > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM源码程序 > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM\stprtool\bayes\bayescln.m

    function [I,Pkx]=bayescln(X,MI,SIGMA,Pk)
% BAYESCLN Bayes classifier for Gaussian distributiuon.
%  [I,Pkx]=bayescln(X,MI,SIGMA,Pk)
%
% This function classifies into the class according to the 
% a posteriori probability calculated using Bayes' formula 
% under the condition that the probability densities p(x|k) 
% have normal (Gaussian) distribution. Each class is described
% by one Gaussian (couple mi, sigma) p(x|k) and its a prior
% probability. 
%
% Input:
%  (notation N - dimension of the feature space, K - number of classes,
%            L - number of input vectors)
%   X [NxL]  Matrix of L input vectors (observations) to be
%              classified, X=[x_1,x2,...,x_L].
%   MI [NxK] Matrix of K vectors of mean values of p(x|k).
%     MI=[mi_1,mi_2,...,mi_K], where mi_j is a column vector [Nx1] for class j.
%   SIGMA [(NxN)xK] Matrix of covariance matrices of the density p(x|k).
%     SIGMA=[sigma_1,sigma_2,...,sigma_K], sigma_j is the covariance
%              matrix corresponding to the class j.
%   Pk [1xK] Vector with a priori probability densities. Pk(j) is an
%     a priori probability of class j.
%
% Output:
%   I [1xL] Vector of class identifiers into which the corresponding
%      points (observations) in the feature space were classified. 
%      I(j) is an identifier for vector X(:,j) and can assume integer
%      values from 1 to K.
%   Pkx [KxL] numbers proportinal to posterior probabilities.
%
% See also LINCLASS.
%

% Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac
% (c) Czech Technical University Prague, http://cmp.felk.cvut.cz
% Written Vojtech Franc (diploma thesis) 19.03.2000 as bayescla
% Modifications
% 26-aug-2002, VF. Pkx renamed; mistake reported by 
%   Chartchai Meesookh (cmeesook@usc.edu)
% 21-may-2001, V.Franc, Pkx added to putput arguments
% 25. 6.00 V. Hlavac, rewritten, renamed to bayescln,
%          comments in English.

K=size(MI,2);  % number of classes
DIM=size(X,1); % dimension
N=size(X,2);   % number of observations

%%%%%%%%%%

Pkx=zeros(N,K);
for k=1:K,
   logPk=log(Pk(k));
   halfLogDetSigma=0.5*log(det(SIGMA(:,(k-1)*DIM+1:k*DIM)));

   Pkx(:,k)=repmat(logPk,N,1)-repmat(halfLogDetSigma,N,1)-0.5*...
       mahalan(X,MI(:,k), SIGMA(:,(k-1)*DIM+1:k*DIM))';
end

Pkx=Pkx';

[tmp,I]=max(Pkx);


return;